﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Sistema.NFe.Xml.Interfaces;
using Sistema.NFe.Xml.Versao200.Mapeamento;
using System.Xml.Linq;
using System.Xml;

namespace Sistema.NFe.Xml.Versao200
{
    class XmlEnvioNFe200 : IXmlEnvioNFe
    {
        String _xml;
        String _versao;
        Int32 _IdLote;
        IList<IXmlNFe> _nfeAdicionados;

        #region Propriedades
        
        public Int32 IdLote
        {
            get { return _IdLote; }
            set { _IdLote = value; }
        }

        public String Versao
        {
            get { return _versao; }
            set { _versao = value; }
        }

        public String Xml
        {
            get { return GeraXml(); }
        }
        #endregion

        private string GeraXml()
        {
            TEnviNFe ClasseEnvioNfe = new TEnviNFe()
            {
                idLote = this._IdLote.ToString(),
                versao = this._versao,
            };

            String XmlNfeAdicionadas = String.Join("", (from a in _nfeAdicionados
                                                        select a.XmlSemCabecalho));
            
            System.Xml.Serialization.XmlSerializerNamespaces namespaces = new System.Xml.Serialization.XmlSerializerNamespaces();
            namespaces.Add("", "http://www.portalfiscal.inf.br/nfe");
            String XmlRetorno = new Util.Serializacao().Serializar<Mapeamento.TEnviNFe>(ClasseEnvioNfe,namespaces);
            XmlRetorno = XmlRetorno.Insert(XmlRetorno.IndexOf("</enviNFe>"), XmlNfeAdicionadas);
            return XmlRetorno;
        }

        public XmlEnvioNFe200()
        {
            this._nfeAdicionados = new List<IXmlNFe>();
            this._xml = String.Empty;
            this._versao = String.Empty;
            this._IdLote = 0;
        }

        public void AdcionarNFe(IXmlNFe Xml)
        {
            this._nfeAdicionados.Add(Xml);
        }
    }
}
